package util.bean;

import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.converters.BigDecimalConverter;
import org.apache.commons.beanutils.converters.IntegerConverter;
import org.apache.commons.beanutils.converters.LongConverter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import util.BaseUtil;

import java.math.BigDecimal;
import java.util.List;
import java.util.Objects;

/**
 * @author yangfan
 * @description 类型转化工具类
 * @date 2018/6/20 19:15
 **/

public class ConvertUtil extends BaseUtil {

	private static final Logger LOGGER = LoggerFactory.getLogger(ConvertUtil.class);

	private ConvertUtil() {
		throw new AssertionError(getClass().getName() + " has no default instances.");
	}

	/**
	 * 默认的转换函数，指定转换类型
	 *
	 * @param convertValue
	 * @param convertValueType
	 * @param <T>
	 * @return
	 */
	public static <T> T defaultConvert(Object convertValue, Class<T> convertValueType) {
		return Objects.isNull(convertValue) ? null : (T) ConvertUtils.convert(convertValue, convertValueType);
	}

	/**
	 * 转换为布尔型
	 *
	 * @param convertValue
	 * @return
	 */
	public static Boolean toBoolean(Object convertValue) {
		return defaultConvert(convertValue, Boolean.class);
	}

	/**
	 * 转换为整形
	 *
	 * @param convertValue 转换的值
	 * @return 转化后的整形数据
	 */
	public static Integer toInteger(Object convertValue) {
		return toInteger(null, convertValue);
	}

	/**
	 * 转换为整形
	 *
	 * @param convertValue 转换的值
	 * @param defaultValue 转化的默认值，如果convertValue值转换有问题
	 * @return 转化后的整形数据
	 */
	public static Integer toInteger(Object defaultValue, Object convertValue) {
		return new IntegerConverter(defaultValue).convert(Integer.class, convertValue);
	}

	/**
	 *
	 * @param convertValue
	 * @return
	 */
	public static List<Integer> toIntegerList(Object convertValue) {
		return defaultConvert(convertValue, List.class);
	}

	/**
	 * 转换为java.lang.Long
	 *
	 * @param convertValue 转换的值
	 * @return 转化后的整形数据
	 */
	public static Long toLong(Object convertValue) {
		return toLong(null, convertValue);
	}

	/**
	 * 转换为java.lang.Long
	 *
	 * @param convertValue 转换的值
	 * @param defaultValue 转化的默认值，如果convertValue值转换有问题
	 * @return 转化后的整形数据
	 */
	public static Long toLong(Object defaultValue, Object convertValue) {
		return new LongConverter(defaultValue).convert(Long.class, convertValue);
	}

	public static List<Long> toLongList(Object convertValue) {
		return defaultConvert(convertValue, List.class);
	}

	/**
	 * 转换为BigDecimal
	 *
	 * @param convertValue
	 * @return
	 */
	public static BigDecimal toBigDecimal(Object convertValue) {
		return toBigDecimal(convertValue, null);
	}

	/**
	 * 转换为大正数
	 *
	 * @param defaultValue
	 * @param convertValue
	 * @return
	 */
	public static BigDecimal toBigDecimal(Object defaultValue, Object convertValue) {
		return new BigDecimalConverter(defaultValue).convert(BigDecimal.class, convertValue);
	}

	public static String toString(Object convertValue) {
		return defaultConvert(convertValue, String.class);
	}



}
